<?php
/**
 * File Name...: libraries\view.php
 * Framework...: Blackbird Framework
 * Author......: KnKill, 2010 (c) KnKill Corporation
 */


define(TPL_EXT, 'php');
/**
 * @package Blackbird Framework
 * @subpackage Libraries
 * @since 0.1
 */
class View
{
    

/**
 * @var array
 * @access private
 * @since 0.1
 */
private $variables = array();


/**
 * @var string
 * @access private
 * @since 0.1
 */
private $path;


/**
 * @access public
 * @since 0.1
 * @param string $key
 * @param mixed $value
 * @param bool $rewrite
 * @return bool
 */
public function set($key, $value, $rewrite = false) {
    if (isset($this->variables[$key]) && (! $rewrite)) {
        $error  = 'Невозможно установить значение переменной `' . $key . '`, т.к.';
        $error .= ' её значение уже установлено, а перезапись не допускается';
        trigger_error ($error, E_USER_NOTICE);
        return false;
    }
    $this->variables[$key] = $value;
    return true;
}


/**
 * @access public
 * @since 0.1
 * @param string $path
 */
public function set_path($path) {
    $this->path = $path;
}


/**
 * @access public
 * @since 0.1
 * @param string $key
 * @return bool
 */
public function remove($key) {
    if (! isset($this->variables[$key])) {
        return false;
    }
    unset($this->variables[$key]);
    return true;
}


/**
 * @access public
 * @since 0.1
 * @return bool;
 */
function show($name, $data = null) {
    $path = $this->path .DS . $name;
    if (! file_exists($path . '.' . TPL_EXT)) {
        trigger_error ('Шаблон `' . $name . '` не существует.', E_USER_NOTICE);
        return false;
    }
    if (is_null($data)) {
        extract($this->variables);
    } else {
        extract($data);
    }
    include $path . '.' . TPL_EXT;
    return true;
}


/**
 * @access public
 * @since 0.1
 * @param string $key
 * @param mixed value
 * @method bool
 */
function __set($key, $value) {
    $this->set($key, $value);
}


// End Of Class "View"
}